跳到主要内容

CNSS 2026 Web Tutorial

🕸️ 前置说明​

本次web教学题目算是创新式的设计,时间上显得有些仓促(笔者已经快被忙疯了),有些地方会语焉不详,也没有考虑好每个学习者的个人情况。笔者已经尽力让题目的考察变得简练、全面,准确,如果在此基础上还要求通俗,那势必会牺牲简洁程度,导致题目愈发冗长。

编题的本意是让新手以最快的速度接触到各种类型的语言,以"裁弯取直"的方式,帮助新手快速入门。如果这样的题目设计反而成为了某种累赘或者说负担,这就不是笔者所期望的了。

因此,笔者提出声明:如果你发现题目内容过于晦涩,即使是查询了资料或询问了AI后,你都难以理解,你可以直接找负责人 @Moder ,请求帮助或提出意见;而如果你是CTF老手或是有经验者,你认为考查内容实在是蹩脚差劲,也可以找负责人对题目内容作吐槽,提出宝贵意见。本声明仅在此处提出一次,在正式题目内容中不会出现,以免占用更多篇幅。

教学题时间线梳理与一些可能存在的奖励🤔​

有能力和信心的话可以试着把教学01-08做完,这样你的收获是最大的。从 01 学到 06 开头是最有性价比的(因为你可以得到不需要在 Windows 上配环境就能跑代码的小技巧)。

题目可能会显得枯燥,但重复知识点其实很少,不懂也可以随便来问负责人。为提升做题积极性,下面放出一些可能的奖励🤔。

题目序号学习内容通关后可能的奖励(00不需要通关)(最好按顺序做,直奔着奖励去可能拿不到想要的奖励)
00啥都不会在教学题中询问负责人任意次,想怎么问怎么问。
01学习bash shell语言
02学习http报文知识
03学习sql语言一些实用工具推荐。比如截图工具,电子书网站,代码学习网站,网安专用工具等。
04学习使用burpsuite
和antsword工具
burpsuite_professional,相比burpsuite_community发包的速度会快一些。不过不是刚需。
05简单学习php,python,java语言
06php相关的专项代码实践
07python相关的专项代码实践300元😍,但不是给你现金;教你购买云服务器和使用ssh。
08java相关的专项代码实践解答一些关于外网、AI工具、效率化工作方面的疑惑。

就这样吧,其实很多好东西都在群文件里面给出了。

Web相关的群文件(两个pdf+resource.zip)食用指南​

最开始肯定是要先看 CNSS_2026_Web_Guideline.pdf,还有这篇 web题目说明.pdf 的。以下对其余的文件内容做逐一介绍:

  • baby-book里面装的是与题目01-08有所关联的教材。其中内容较多,建议一边着手做教学题,一边看教材对证(提示:ctrl+F快速找到相应位置),并辅以搜索相关资料。
  • marktext是markdown类型文件的编辑查看器,可以直接用marktext的方式打开并编辑markdown类型文件(这种文件以.md为后缀,你在不久后可能就会接触到这类文件了)。
  • Obsidian是markdown类型文件的笔记整理工具,但它不支持直接以Obsidian的方式打开markdown类型文件,它的优秀之处在于其强大的笔记关联功能,建议和marktext搭配使用。
  • obs-studio是录屏软件。
  • VScode是集成开发环境软件,即程序员常说的IDE,你可能会在教学题06用到它。
  • 各个题目的题目附件。

关于题目录制​

录制方式​

Windows和Macos应该各有自带的录制功能吧?如果你用不习惯,可以玩一玩OBS-studio.

常规来说录制页面长这样(有的题目没有这样的规定,注意审题):​

按win+←可以实现分屏

录制页面示意

关于教学题目的内容说明​

01-08教学题目,都建议玩熟了再去录制。不懂的地方可以查询资料,询问AI或负责人,确保概念理解上没有出现偏差。

做!题!之!前!先!看!分!值!

提前做好心理预期,勿谓言之不预也。

01LinuxShell​

如果你用的是 Windows,那么先点 win + R,再输入 powershell,你就可以快速打开一个 Powershell 命令行。再输入 wsl --install --web-download 就可以安装wsl的软件包。你的linux发行版本可以选择Ubuntu(这是默认的)或者kali-linux。

如果你发现你无法安装wsl,你可以去B站搜索相关视频,应该很快就能解决问题。安装完成后,建议将软件包源文件换成清华源。

完成基础配置以后,恭喜你,成功踏入了新世界的大门。为何推荐wsl?因为它轻量快捷。

当然,想用VMware(某款虚拟机)的话也不是不行,只是用起来略有卡顿,安装和修改配置也不太方便。

MacOS的话自己的终端就够用了.

本题主要考察Linux的一些基本操作,帮助你用命令行实现简单的文件编辑,同时也是为后续学习RCE打下微不足道的基础。

wsl的快捷打开:​

win+R输入wsl ~

wsl 的快捷打开

快速翻查教材资料:​

快速翻查教材资料

在wsl中点击"↑"快速调用上一次输入的语句:​

在 wsl 中按 ↑ 调用上一次输入的语句

02HTTP​

Linux终端里面下载curl软件包(nmap同理):

sudo apt update;
sudo apt install curl -y

本题做了随机数处理,做题时还请仔细阅读题目要求。

HTTP报文知识也算蛮重要的了。

03SQL​

本题限定使用MYSQL或MariaDB.

软件包安装方式:

sudo apt install mysql-server -y

或

sudo apt install mariadb-server -y

启动方式(两者是一致的):

sudo systemctl start mysql
sudo mysql

关闭和停止服务方式:

exit
sudo systemctl stop mysql

04Burp_Antsword​

  • 本题的题目附件内容:Antsword,webshell管理工具,通过上传一句话木马并以特定方法连接,可以控制目标服务器底层系统;Burpsuite,抓包改包神器,常用来实现目录爆破或者条件竞争漏洞的利用;path.txt,网站常用备份目录(不全面但够用)。其中Antsword文件夹下的antSword-master是必须下载的,另外两个文件则是加载包,看你电脑型号(windows?macos?)选择,其中macos加载包只有x64的,可能需要手动兼容一下。Burpsuite也是根据你自己的机型来下载。

!看!这!里!看!这!里!从这一关开始你可能会遇到点“隐私”问题,因为频繁切换页面可能会导致你的桌面被展示。如果你觉得无伤大雅,那就怎么舒服怎么来。如果你确实注重你的隐私,那就通读题目内容,想一想什么地方需要用到什么窗口,点击什么内容。把需要用到的窗口,容器都提前打开。把前置工作做好,就不会显得手忙脚乱。笔者只在这里声明一次,其他地方就不赘述了(因为懒)。

细节示意图:​

提前打开四个页面​

提前打开四个页面

提前将以下两个文件放入某个文件夹中待用​

提前将以下两个文件放入某个文件夹中待用

注意不要拦错响应包​

注意不要拦错响应包

05Babycoding​

三种交互式命令(php -a,python,jshell)行对应的安装方式:

sudo apt install php-cli -y
sudo apt install python3-ipython -y
sudo apt install openjdk-25-jdk -y

启动方式:

php -a
python
jshell

退出方式:

exit
exit
/exit

补充知识点​

三种语言的编译器(php,python,java)对应的下载方式:

sudo apt install php-cli -y
sudo apt install python3 -y
sudo apt install openjdk-25-jdk -y

编译检查(可选,仅用于语法检查/预生成字节码):

php -l test.php
python3 -m py_compile test.py
javac Test.java

直接运行(无需手动编译):

php test.php
python3 test.py
java Test.java

(php和python为解释型语言,直接运行源文件即可;java11及以上的单文件也可用java Test.java直接运行,多文件或有classpath依赖时才需javac Test.java && java Test)

java考察部分中,如何修改类Bas的结构?(情况特殊,此处单独讲解)​

快速点击“↑”可以调用出之前定义类Bas时候的输入

只需重新声明一次类,新类就会直接替换掉旧类。已用旧类定义的对象会被直接设为null(可能随jshell版本有差异?🤔)。

重新声明类 Bas

06PHP​

在VScode接入wsl里的编译环境:以后你就不用在windows上配环境了!​

找到你VScode的安装地址,复制/bin的地址(可以对快捷方式右键:打开文件所在的位置)

复制 VSCode 的 bin 目录地址

win+I,直接在搜索框输入“环境变量”,然后按照以下方式操作。做完记得都要点确认!!!!!

配置环境变量

在wsl里面快速启动VScode:​

在 wsl 里面快速启动 VSCode

换个角度想:怎么在VScode里快速启动内置终端的wsl?​

在 VSCode 里快速启动内置终端的 wsl

VScode能够与内置终端的wsl进行"文件协作":​

VSCode 与内置终端的 wsl 进行文件协作

VScode放在群文件里的,这一点前文有所提及。IDE可以尽早接触。当然,在baby_learning阶段,先从Linux开始练手自然是更加推荐的。

  • 本题的题目附件内容:twig-cli,简单自制版php twig命令行,输入形如{{payload}}或{%payload%}的内容即可获得回显,不过使用前需要在当前目录用composer来编译目标twig版本,详细内容下面会讲。unserial文件夹,内含反序列化相关题库,15道题,作为本关第三大部分的考察内容。你需要简单修改代码并运行,以完成题目要求。

在这里介绍一下twig并做下其他知识的引入:twig是php语言的模版渲染引擎,类似的有python语言的jinja2,java语言的thymeleaf(此处指集成了spring扩展的情况),JSP(使用了struts tags这个组件)。它们各自对应着一种经典漏洞注入方式。

语言环境Web Framework模版渲染引擎底层表达式语言
pythonFlaskJinja2Jinja2原生语言
phpSymfony/LaravelTwigTwig原生语言
javaSpring MVCThymeleaf(+spring)SpEL
javaStruts2JSP(+Struts Tags)OGNL

需要注意的是,在php和python中漏洞利用时,模版渲染引擎和底层表达式语言是紧密相连的。但在java中,模版渲染引擎部分与底层表达式语言部分分得很开,底层表达式语言(SpEL,OGNL)单独作为漏洞注入的核心,模版渲染引擎只算是提供了注入的场景,即使更换场景,底层表达式语言的漏洞逻辑没变,则漏洞仍然存在。

接下来做twig-cli的食用指南:以下内容中,Twig版本固定为2.12.3。

twig命令行启动方式(假设工作目录在~/workplace,并且你已经从题目附件中下载了twig-cli):

cd workplace
composer require "twig/twig:2.12.3" --ignore-platform-reqs
./twig-cli 或 bash -c "$(cat twig-cli)"

这之后你应该会获得一个"Twig>"的命令行。

退出方式:

点击ctrl+C

如果你还不想离开LinuxShell并着手使用IDE,你可以这样编辑运行文件:​

在终端中编辑并运行文件

07Python​

  • 本题的题目附件内容:jinja-cli,它的基本情况与twig-cli高度相似(可能唯一差别是不需要用到composer),此处不再赘述。

jinja2命令行启动方式:

cd workplace
./jinja-cli 或 bash -c "$(cat jinja-cli)"

这之后你应该会获得一个"Jinja>"的命令行。

退出方式:

点击ctrl+C

python想考的话考点真蛮多的,此处就只涉及一些简单的脚本化工作流程吧。

建议录屏方式:​

07 建议录屏方式

08Java​

Java的考点多而杂。笔者曾严肃考虑过做SpEL-cli,OGNL-cli的可能性,但无论如何效果都不理想。最终还是选取以做题者本地启动容器并解出题目的方式来考察。

  • 本题的题目附件内容:SpEL文件夹,内含Vulhub提供的SpEL漏洞相关靶场以及题解。OGNL文件夹,内含Vulhub提供的OGNL漏洞相关靶场以及题解。两份Docker桌面版安装文件,分别对应的是windows桌面版docker和macos桌面版docker,两者都能以电脑内置命令行的方式启动。deserial文件夹,内含多道java反序列化相关题目,你需要简单编辑修改代码,完成题目要求(具体多少道不清楚,笔者写到这已经头晕目眩,如果笔者出完题目以后还能想起来的话,会来这里补充有多少道题的)。

关于deserial文件夹的一些细节​

这个反序列化教学题还是和php_addition里面那个不一样的。java反序列化对版本,依赖,以及某些开关的敏感性可能远超你的想象。希望你能注意这一点。

在PQ链和CC6链里面,你可能会看到一些非常相近但又有所不同的代码写法。笔者个人来讲是比较推荐CC6链里面的那种简单写法的,不过这种写法可能会遇到泛型警告🤔,这个就得你自己去慢慢试了,教学题的考察不会涉及这一点,此处仅作了解即可。

容器题建议录屏方式:​

容器题建议录屏方式

购买轻量应用服务器(即打包好的VPS,记得买国际型的,国内的要备案)​

购买轻量应�用服务器 1

购买轻量应用服务器 2

购买轻量应用服务器 3

web正式题目的内容说明​

在正式题目中,就不能像教学题那样随便问负责人了(因为要确保公平性),你需要保证你问的问题的深度,要充分思考后依然山穷水尽的时候,再带着自己已有的思考询问负责人,否则负责人只会回复你"再多想想呢"。不过你可以随便问AI,这个倒是不限制的(但应当拒绝去全盘接受AI的所有回复内容)。

有的题目会设有阶段性flag分值,如果你发现了形如flag{}的flag,就去提交吧。

每道正式题目都欢迎提交题解,分值最高占原题目最高分值的50%。题解形式包括但不限于:从开天辟地开始录的录屏文件、自己整理的相关笔记资料、导出自己与AI对话的记录、自己对这道题的理解(用自然语言或代码实践的方式表述)。形式上不必拘谨,内容上务必详实。

题解发送到的邮箱依然不变:3175105352\@qq.com。

做出题目,获得形如cnss{}的flag并提交后,可以与负责人交流题目内容,讨论更优解。